// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
De vele redenen van Nederlanders om voor casino zonder CRUKS te kiezen – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
De vele redenen van Nederlanders om voor casino zonder CRUKS te kiezen
In Nederland kiezen steeds meer spelers ervoor om te gokken bij casino’s zonder CRUKS (Centraal Register Uitsluiting Kansspelen). Deze keuze wordt gedreven door verschillende factoren, waaronder de zoektocht naar vrijheid, een bredere selectie van spellen en een verbeterde speelervaring. In dit artikel gaan we dieper in op de redenen waarom Nederlanders deze optie prefereren en wat de gevolgen hiervan zijn voor zowel spelers als de gokindustrie.
Wat is CRUKS en waarom kiezen spelers ertegen?
CRUKS is een register waarin spelers die zich hebben uitgesloten van kansspelen worden vastgelegd. Dit is bedoeld om verantwoord spelen te bevorderen en gokverslaving tegen te gaan. Echter, voor veel Nederlanders vormt het register een obstakel. Hier zijn enkele redenen waarom spelers zich meer aangetrokken voelen tot casino’s zonder CRUKS:
Geen beperkende maatregelen: Spelers willen zelf de controle houden over hun speelgedrag.
Toegang tot een breder scala aan spellen: Casino’s zonder CRUKS bieden vaak meer opties en diversiteit in spellen.
Minder administratieve hobbels: Spelen zonder CRUKS betekent dat er minder tijd aan registratie en uitsluiting hoeft te worden besteed.
Een gevoel van anonymiteit: Spelers voelen zich vaak vrijer zonder registratie in een toezichtregister.
Snellere toegang tot bonussen: Casino’s zonder CRUKS bieden vaak aantrekkelijke bonussen zonder de beperkingen van het register.
De aantrekkingskracht van een vrijere speelomgeving
Een van de belangrijkste redenen dat Nederlanders kiezen voor casino’s zonder CRUKS is de aantrekkingskracht van een vrijere speelomgeving. Bij traditionele casino’s worden spelers vaak geconfronteerd met spanning tussen verantwoord gokken en de druk van uitsluiting. Door te kiezen voor een casino buiten het CRUKS-systeem, voelen spelers zich minder beperkt en kunnen ze in hun eigen tempo spelen. Dit biedt hen de mogelijkheid om te experimenteren met verschillende spellen zonder de angst om in een register beland te worden, wat soms als een stigma kan worden ervaren.
Bovendien kunnen spelers zo sneller inspelen op de nieuwste spelontwikkelingen. Terwijl CRUKS- geregistreerde casino’s mogelijk langzamer zijn met het introduceren van nieuwe spellen uit zorg voor verantwoord gokken, komen casino’s zonder CRUKS vaak sneller met innovatieve spellen en structuren die aansluiten bij de wensen van de moderne gokker casino zonder cruks.
De rol van bonussen en promoties
Een andere belangrijke factor die speelt bij de keuze voor casino’s zonder CRUKS is de grote variëteit aan bonussen en promoties. Deze casino’s bieden vaak aantrekkelijke welkomstbonussen die aanzienlijk kunnen zijn. Veel spelers geven aan dat bonussen een grote rol spelen bij hun beslissing waar ze willen gokken. Enkele typische bonusvormen die spelers aantrekken zijn:
Welkomstbonussen: Aantrekkelijke aanbiedingen voor nieuwe spelers.
Gratis spins: Kans om gratis te spelen zonder inleg.
Terugbetalingsbonussen: Spelers krijgen een percentage van hun verliezen terug.
Loyaliteitsprogramma’s: Voordelen voor trouwe spelers die regelmatig terugkeren.
Door de mogelijkheid om te profiteren van deze bonussen zonder de beperking van CRUKS, voelen spelers zich vaak aangemoedigd om te kiezen voor deze casino’s. Dit kan hun speelervaring verbeteren en hen de kans geven om meer waar voor hun geld te krijgen.
Risico’s en verantwoordelijk spel
Hoewel er vele redenen zijn om voor casino’s zonder CRUKS te kiezen, is het belangrijk om de risico’s van deze keuze te overwegen. Spelers moeten zich bewust zijn van hun speelgedrag en mogelijke verslavingsgevoeligheid. Er zijn verschillende manieren waarop spelers verantwoord kunnen blijven spelen, zelfs in een vrijere omgeving. Enkele tips zijn:
Stel een budget vast: Bepaal een maximum bedrag dat je bereid bent te verliezen en houd je hieraan.
Beperk je speeltijd: Zorg ervoor dat je niet te veel tijd achter elkaar speelt.
Speel alleen met geld dat je kunt missen: Gebruik geen geld dat bestemd is voor essentiële uitgaven.
Zoek hulp indien nodig: Aarzel niet om professionele hulp te zoeken als je merkt dat je controle verliest.
Conclusie
De keuze van Nederlanders voor casino’s zonder CRUKS is een duidelijk voorbeeld van de drang naar vrijheid, diversiteit en een verbeterde speelervaring. Terwijl spelers genieten van de voordelen zoals aantrekkelijkere bonussen en een breder spelassortiment, is het cruciaal om verantwoordelijk te blijven gokken en de risico’s te begrijpen. Dit betekent dat terwijl de aantrekkingskracht van casino’s zonder CRUKS groeiende is, spelers ook moeten zorgen voor een gezonde benadering van het gokken.
Veelgestelde Vragen
1. Is gokken bij casino’s zonder CRUKS legaal?
Ja, zolang ze zich aan de relevante wetten en richtlijnen houden, kunnen casino’s zonder CRUKS legaal opereren.
2. Hoe kan ik verantwoord gokken?
Stel een budget vast, beperk je speelduur en herken de signalen van problematisch gokken.
3. Wat zijn de voordelen van registratie bij CRUKS?
Het biedt spelers bescherming tegen gokverslaving en helpt hen verantwoord te blijven spelen.
4. Kan ik bonussen claimen bij casino’s zonder CRUKS?
Ja, veel casino’s zonder CRUKS bieden aantrekkelijke bonussen aan als stimulans voor nieuwe spelers.
5. Welke spellen zijn populair in casino’s zonder CRUKS?
Populaire spellen omvatten slots, roulette, blackjack en live dealer-spellen.